/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.bc;

import java.util.Date;
import java.util.List;
import javax.ejb.Local;
import org.cip.esymons.colegiatura.be.Colegiado;
import org.cip.esymons.eventos.be.PreinscripcionEvento;
import org.cip.esymons.general.be.Solicitante;
import org.cip.esymons.tesoreria.adapters.AporteXCajaMutual;
import org.cip.esymons.tesoreria.adapters.DeudaPorNumeroCuotas;
import org.cip.esymons.tesoreria.adapters.AporteXConsejoNacional;
import org.cip.esymons.tesoreria.adapters.CajaMutualXColegiado;
import org.cip.esymons.tesoreria.adapters.DeudaPorTipo;
import org.cip.esymons.tesoreria.adapters.VerDeuda;
import org.cip.esymons.tesoreria.be.CuentaIngreso;
import org.cip.esymons.tesoreria.be.DocumentoPago;
import org.cip.esymons.tesoreria.be.EnumCondicionalesNumericos;
import org.cip.esymons.tesoreria.be.EnumTipoDeuda;
import org.cip.esymons.tesoreria.be.MovimientoCuenta;
import org.cip.esymons.tesoreria.be.ProcesoElectoral;
import org.cip.esymons.tesoreria.be.TipoMoneda;
import org.cip.esymons.tramite.be.TipoDocumento;
import org.cip.esymons.tramite.be.Transaccion;

/**
 *
 * @author Administrador
 */
@Local
public interface MovimientoCuentaFacadeLocal {

    void create(MovimientoCuenta movimientoCuenta);

    void edit(MovimientoCuenta movimientoCuenta);

    void remove(MovimientoCuenta movimientoCuenta);

    MovimientoCuenta find(Object id);

    List<MovimientoCuenta> findAll();

    List<MovimientoCuenta> deudaxTipo(Solicitante solicitante, EnumTipoDeuda enumTipoDeuda);

    void crearDeudaParaEventos(PreinscripcionEvento preinscripcionEvento);

    VerDeuda mostrarDeudaTotalCuotasSolicitante(Long codigo, int tipo, Date fecha);

    boolean tieneFraccionamiento(Long codigo);

    List<MovimientoCuenta> buscarMovimientosDeCuotasEntreFechas(Date fechaIni, Date fechaFin, Long codigoSolicitante, String codigoCuentaIngreso);

    void crearDeudaParaColegiatura(String DNI, int cuotas, Date fecha);

    Boolean crearDeudaPorMultasDeColegiados(List<Colegiado> lista, ProcesoElectoral procesoElectoral);

    Boolean crearDeudaPorMultasDeMiembrosMesa(List<Colegiado> lista, ProcesoElectoral procesoElectoral);

    List<DeudaPorTipo> mostrarDeudaXTipoDeColegiadosMorosos(EnumCondicionalesNumericos condicion, Double valor1, Double valor2);

    List<DeudaPorNumeroCuotas> mostrarDeudaXNumCuotasVencidasDeColegiadosMorosos(Date fechaMorosidad, EnumCondicionalesNumericos condicion2, Integer numCuotasVencidas1, Integer numCuotasVencidas2);

    void anularCuotas(String cip, Date fecha);

    void anularDeuda(Solicitante solicitante, CuentaIngreso cuentaIngreso, Date fecIni, Date fecFin);

    DocumentoPago crearDeudaTramite(List<CuentaIngreso> lista, Solicitante solicitante, Date fecha, Transaccion trans,TipoDocumento tipoDocumento, Double deuda,TipoMoneda tm);

    DocumentoPago PagarTramite(List<CuentaIngreso> lista, Solicitante solicitante, Date fecha, Transaccion trans, TipoDocumento tipoDocumento, Double montoObra, TipoMoneda tm);

    List<MovimientoCuenta> deudaxTramite(Transaccion trans);

    List<MovimientoCuenta> deudaxTipo(Solicitante solicitante, EnumTipoDeuda enumTipoDeuda, Date fecha);

    List<MovimientoCuenta> deudaxTipoParaCobroPlanilla(Solicitante solicitante, EnumTipoDeuda enumTipoDeuda);

    //metodo para reporte de aportes x caja mutual
    List<AporteXCajaMutual> mostrarAporteColegiadosXCajaMutual(Integer anioPago, Integer mesPago);
    //fin de metodo

    //metodo para reporte de aportes x consejo nacional
    List<AporteXConsejoNacional> aportesColegiadosXConsejoNacional(Integer anioPagoCN, Integer mesPagoCN);
    //fin de metodo

    //metodo para reporte de aportes de caja mutual x colegiado
    List<CajaMutualXColegiado> cajaMutualXColegiado(String numeroCip);
    //fin de metodo


    List<Colegiado> obtenerColegiadosConDeuda();
}
